package com.yt.ds.chapter3;

/**
 * @Author: lzf
 * @Date: 2020/7/16 17:07
 * @Description: 序号表接口
 */
public interface ST<Key extends Comparable<Key>, Value> {
    /**
     * 描述：设值
     *
     * @param key   键
     * @param value 值
     * @return "void"
     * @date: 2020/7/16 17:09
     */
    void put(Key key, Value value);

    /**
     * 描述： 取值
     *
     * @param key 键
     * @return "Value"
     * @date: 2020/7/16 17:09
     */
    Value get(Key key);

    /**
     * 描述：删除指定键对应的节点
     *
     * @param key 要删除的键
     * @return "void"
     * @date: 2020/7/17 9:50
     */
    void delete(Key key);

    /**
     * 描述：删除最小节点
     *
     * @param
     * @return "void"
     * @date: 2020/7/17 9:51
     */
    void deleteMin();

    /**
     * 描述：获取尺寸
     *
     * @param
     * @return "int"
     * @date: 2020/7/16 17:09
     */
    int size();

    /**
     * 描述：是否空
     *
     * @param
     * @return "boolean"
     * @date: 2020/7/16 17:12
     */
    boolean isEmpty();

    /**
     * 描述：最小的键
     *
     * @param
     * @return "Key"
     * @date: 2020/7/16 17:13
     */
    Key min();

    /**
     * 描述：最大的键
     *
     * @param
     * @return "Key"
     * @date: 2020/7/16 17:13
     */
    Key max();

    /**
     * 描述：小于或等于key的最大键
     *
     * @param key 待查找的key
     * @return "Key"
     * @date: 2020/7/16 17:22
     */
    Key floor(Key key);

    /**
     * 描述：
     *
     * @param key 目标键
     * @return "int"
     * @date: 2020/7/17 9:22
     */
    int rank(Key key);

    /**
     * 描述：排第N个的键
     *
     * @param n 排名
     * @return "Key"
     * @date: 2020/7/17 9:22
     */
    Key select(int n);

    /**
     * 描述：遍历整棵树
     * @param
     * @return "void"
     * @date: 2020/7/17 11:30
     */
    void display();
}
